#include <iostream>
#include <vector>
using namespace std;
using ll=long long;
const int N=1e6+10;
struct node{
	int l,r,d;
};
ll a[N];
ll b[N];
ll c[N];
int n,m;
vector<node> v;
bool check(int x)
{
	for(int i=1;i<=n;i++)
		c[i]=b[i];
	ll ret=0;
	for(int i=1;i<=x;i++)
	{
		c[v[i-1].l]-=v[i-1].d;
		c[v[i-1].r+1]+=v[i-1].d;
	}
	for(int i=1;i<=n;i++)
	{
		ret+=c[i];
		if(ret<0)
			return false;
	}
	return true;
}
int main()
{
	
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		scanf("%lld",&a[i]);
	}
	
	for(int i=1;i<=n;i++)
	{
		b[i]=a[i]-a[i-1];

	}
	for(int i=1;i<=m;i++)
	{
		int s,t,d;
		scanf("%d%d%d",&d,&s,&t);
		v.push_back({s,t,d});
		
		
	}

	int l=0,r=m;
	while(l<r)
	{
		int mid=l+(r-l+1)/2;
		if(check(mid))
		{
			l=mid;
		}
		else{
			r=mid-1;
		}
	}
	if(l<m)
		cout<<-1<<endl<<l+1<<endl;
	else{
		cout<<0<<endl;
	}
	return 0;
}
